/*
 * Android Runner is a multiplayer GPS game fully written by Xurxo Mendez Perez
 * 
 * Copyright (C) 2009 Xurxo Mendez Perez
 *   
 * This file is part of Android Runner.
 * 
 * Android Runner is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Android Runner is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Android Runner.  If not, see <http://www.gnu.org/licenses/>.
 */

package es.sonxurxo.androidrunner.model.persistence.game.accessor;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import es.sonxurxo.androidrunner.model.persistence.game.entity.FinishedGameRegister;
import es.sonxurxo.androidrunner.model.persistence.game.entity.Game;
import es.sonxurxo.androidrunner.model.persistence.player.entity.Player;
import es.sonxurxo.androidrunner.model.persistence.util.accessor.GenericAccessorHibernate;
import es.sonxurxo.androidrunner.model.persistence.util.exceptions.InstanceNotFoundException;

/**
 * 
 * @author "Xurxo Mendez Perez"
 *
 */
public class FinishedGameRegisterAccessorHibernate 
	extends GenericAccessorHibernate<FinishedGameRegister, Long> 
	implements FinishedGameRegisterAccessor {

	@SuppressWarnings("unchecked")
	public List<FinishedGameRegister> findAllRegistersByPlayer(Player player) throws InstanceNotFoundException {
		
		return getSession().createQuery(
				"SELECT f FROM FinishedGameRegister f " +
				"WHERE f.game IN " +
				"(SELECT f2.game FROM FinishedGameRegister f2 " +
				"WHERE f2.player = :player) " +
				"ORDER BY f.game"
				).setParameter("player", player).list();
	}

	@SuppressWarnings("unchecked")
	public List<FinishedGameRegister> findAllRegistersByGame(Game game) {
		Criteria criteria = this.getSession().createCriteria(FinishedGameRegister.class);
		criteria.add(Restrictions.eq("game", game));
		criteria.addOrder(Order.asc("position"));
		return criteria.list();
	}
}